Read dataset¶

Pustaka pandas digunakan untuk membaca dan menganalisa data dalam berbagai format. Secara umum fungsi-fungsi pada pandas mirip dengan Microsoft Excel.

Informasi lengkap mengenai pandas dapat dilihat di https://pandas.pydata.org/.

In [1]:
import pandas as pd

df = pd.read_csv("../datasets/titanic_numerical_features.csv", index_col="PassengerId")
df.head()
Out[1]:
Survived Pclass Age SibSp Parch Fare
PassengerId
1 0 3 22.0 1 0 7.2500
2 1 1 38.0 1 0 71.2833
3 1 3 26.0 0 0 7.9250
4 1 1 35.0 1 0 53.1000
5 0 3 35.0 0 0 8.0500

Dataset information¶

Untuk mengakses informasi pada DataFrame seperti jumlah baris, jumlah kolom, tipe data kolom, ukuran memori, dan lain-lain dapat menggunakan perintah DataFrame.info().

Information¶

In [2]:
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 6 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   Survived  891 non-null    int64  
 1   Pclass    891 non-null    int64  
 2   Age       714 non-null    float64
 3   SibSp     891 non-null    int64  
 4   Parch     891 non-null    int64  
 5   Fare      891 non-null    float64
dtypes: float64(2), int64(4)
memory usage: 48.7 KB

Quick EDA¶

Salah satu produk turunan dari pandas adalah pandas-profiling. Pustaka pandas-profiling menyediakan fungsi untuk melakukan EDA (Exploratory Data and Analysis) dengan cepat. Menampilkan overview, variables, interactions, correlations, missing value, dan samples dalam bentuk laporan berformat .html.

Informasi mengenai pandas-profiling dapat dilihat di https://pandas-profiling.ydata.ai/docs/master/index.html.

In [3]:
from pandas_profiling import ProfileReport

profile = ProfileReport(df, title="Pandas Profiling Report")
profile
Summarize dataset:   0%|          | 0/5 [00:00<?, ?it/s]
Generate report structure:   0%|          | 0/1 [00:00<?, ?it/s]
Render HTML:   0%|          | 0/1 [00:00<?, ?it/s]
Out[3]:

Drop Missing Value¶

Tahapan drop missing value sangat penting dilakukan agar fitur yang digunakan pada saat training tidak ada yang kosong. Tahapan ini perlu pertimbangan yang memadai, karena bisa saja menghilangkan suatu fitur dapat mengurangi informasi dari dataset yag dapat mempengaruhi performa dari model.

In [4]:
df.isna().sum()
Out[4]:
Survived      0
Pclass        0
Age         177
SibSp         0
Parch         0
Fare          0
dtype: int64
In [5]:
df = df.dropna()
df.isna().sum()
Out[5]:
Survived    0
Pclass      0
Age         0
SibSp       0
Parch       0
Fare        0
dtype: int64

Build Model¶

Dataset Splitting¶

Pemisahan dataset menjadi train dan test set dilakukan untuk mengurangi data leakage atau kebocoran informasi. Model tidak boleh mengetahui pola dari test set. Untuk melakukan pemisahan dataset dapat menggunakan pustaka scikit-learn, yaitu fungsi train_test_split.

In [6]:
from sklearn.model_selection import train_test_split

X = df.drop(columns="Survived")
y = df.Survived

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y)

print(f"X_train shape, rows: {X_train.shape[0]}, columns: {X_train.shape[1]}")
print(f"X_train shape, rows: {y_train.shape[0]}")
print(f"X_test shape, rows: {X_test.shape[0]}, columns: {X_test.shape[1]}")
print(f"y_test shape, rows: {y_test.shape[0]}")
X_train shape, rows: 571, columns: 5
X_train shape, rows: 571
X_test shape, rows: 143, columns: 5
y_test shape, rows: 143

Train Model¶

Untuk membuat model machine learning dapat menggunakan pustaka scikit-learn dan mengimpor algoritma yang inginkan. scikit-learn menyediakan berbagai fungsionalitas dan algoritma terkait machine learning.

Untuk lebih lengkapnya, terkait fungsi dan algoritma yang disediakan scikit-learn dapat mengunjungi https://scikit-learn.org/stable/modules/classes.html#.

In [7]:
from sklearn.neighbors import KNeighborsClassifier

model = KNeighborsClassifier(n_neighbors=3, n_jobs=-1)
model.fit(X_train, y_train)
Out[7]:
KNeighborsClassifier(n_jobs=-1, n_neighbors=3)

Evaluate¶

Evaluasi dilakukan untuk meninjau performa dari model. Biasanya menggunakan akurasi pada kasus klasifikasi. Pengujian dapat dilakukan dengan menggunakan train dan test dataset. Tetapi, pengujian dengan test dataset menjadi acuan utama dalam meninjau performa model.

Untuk lebih lengkapnya dapat mengunjungi halaman berikut https://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics.

In [8]:
print(f"Train accuracy : {model.score(X_train, y_train)}")
print(f"Test accuracy  : {model.score(X_test, y_test)}")
Train accuracy : 0.7898423817863398
Test accuracy  : 0.6783216783216783

Predict with new dataset¶

Setelah melakukan training dan evaluasi terhadap model, model dapat digunakan untuk melakukan prediksi menggunakan data baru.

In [9]:
df_new = pd.DataFrame(
    data=[[1, 34., 2, 7, 300.],
         [3, 50., 0, 0, 7.34]],
    columns=X_train.columns,
    index=[892, 893]
)

train_preds = model.predict(df_new)

df_new["Survived Predicition"] = train_preds
df_new
Out[9]:
Pclass Age SibSp Parch Fare Survived Predicition
892 1 34.0 2 7 300.00 1
893 3 50.0 0 0 7.34 0

Save Model¶

Setelah training dan evaluasi model, model dapat disimpan dengan menggunakan pustaka joblib. Fungsi dump untuk menyimpan objek model dan load untuk menggunakan objek yang telah disimpan sebelumnya.

In [10]:
from joblib import dump, load

dump(model, "../pretrained_models/model.joblib")

model = load("../pretrained_models/model.joblib")
model.predict(df_new.iloc[:, 0:5])
Out[10]:
array([1, 0], dtype=int64)

Semoga bermanfaat yah 😄

Dibuat dengan penuh 💚 oleh haloapping